table of contents
CONNECT(2) | Linux - příručka programátora | CONNECT(2) |
JMÉNO¶
connect - inicializuj spojení soketu
SYNTAXE¶
#include <sys/types.h> /* Viz POZNÁMKY*/
#include <sys/socket.h>
int connect(int sockfd, struct struct sockaddr *serv_addr, socklen_t addrlen);
POPIS¶
Systémové volání connect() připojí soket specifikovaný v sockfd k adrese specifikované v serv_addr. Parametr addrlen udává velikost serv_addr. Formát adresy v serv_addr je dán adresovým prostorem deskriptoru v sockfd. Viz socket(2) pro více detailů.
Parametr sockfd je soket. Je-li jeho typ SOCK_DGRAM, pak je serv_addr jediným místem, odkud a kam budou přijímány, resp. posílány datagramy. Je-li typ soketu SOCK_STREAM , nebo SOCK_SEQPACKET potom se toto volání pokusí navázat spojení se soketem, který je specifikován v serv_addr , což je adresa v jmenném prostoru soketu. Každý jmenný prostor interpretuje adresu v serv_addr.
Obecně se mohou protokolové sokety úspěšně spojit pouze jednou; datagramové sokety mohou použít volání connect vícekrát. Datagramové sokety mohou zrušit asociovaný soket tak, že se pokusí spojit s adresou z sa_family z sockaddr nastavenou na AF_UNSPEC (podporováno od linuxového jádra 2.2).
NÁVRATOVÁ HODNOTA¶
Je-li spojení navázáno, je vrácena 0, jinak -1 a externí proměnná errno je příslušně nastavena.
CHYBY¶
Tento seznam je pouze všeobecný. Mohou existovat další specifické chyby pro použitý jmenný prostor.
- EACCES
- Pro sokety unixové domény, které jsou identifikovány jménem: je odmítnuto zapisování do souboru specifikovaného soketem, nebo je odmítnuto právo vyhledávat v adresářích specifikovaných cestou. (Viz path_resolution(7).)
- EACCES, EPERM
- Uživatel se pokusil připojit k broadcastové adrese, aniž by měl povolen broadcastový příznak na soketu, nebo požadavek na spojení byl odmítnut kvůli lokálnímu pravidlu firewallu.
- EAFNOSUPPORT
- Poskytnutá adresa nemá správně specifikovanou rodinu adres v poli sa_family.
- EAGAIN
- Nejsou volné žádné lokální porty, nebo jsou nedostatečné záznamy v cache směrovače. Pro AF_INET viz net.ipv4.ip_local_port_range v ip(7) ,jak zvýšit počet lokálních portů.
- EINPROGRESS
- Soket je neblokující a spojení nemůže být okamžitě dokončeno. Viz select(2) nebo poll(2).
- ETIMEDOUT
- Timeout při pokusu o navázání spojení. Server může být příliš zaneprázdněn a není schopen přijmou další spojení. Vězte, že pro IP sokety může být timeout velmi dlouhý, pokud jsou syncookies povoleny na straně serveru.
- EINTR
- Systémové volání bylo přerušeno doručením signálu. Viz signal(7).
- EALREADY
- Soket je neblokující a předchozí pokus o spojení ještě nebyl dokončen.
- EBADF
- Špatný deskriptor.
- EFAULT
- Adresa soketu je mimo adresový prostor procesu.
- ENOTSOCK
- Deskriptor není platným deskriptorem soketu.
- EISCONN
- Soket je již spojen.
- ECONNREFUSED
- Spojení bylo serverem odmítnuto.
- ETIMEDOUT
- Časový limit pro spojení vypršel.
- ENETUNREACH
- Síť není dosažitelná.
- EADDRINUSE
- Adresa je již používána.
SPLŇUJE STANDARDY¶
SVe4, 4.4BSD, (funkce connect() se poprvé objevila ve 4.2BSD), POSIX.1-2001.
POZNÁMKY¶
POSIX.1-2001 nevyžaduje vložení <sys/types.h> a ani na Linuxu není tento soubor vyžadován. Nicméně některé starší (BSD) implementace tento hlavičkový soubor vyžadují a v přenositelných aplikacích by tedy měl být vložen.
Třetí argument connect()je ve skutečnosti int(v BSD4.X a libc4 a libc5). Některé zmatky v normě POSIX vyústily v přítomnost socklen_t používaném také v glibc. Viz accept(2).
PŘÍKLAD¶
Příklad použití connect() je v getaddrinfo(3).
DALŠÍ INFORMACE¶
accept(2), bind(2), listen(2), socket(2), getsockname(2), path_resolution(7)
TIRÁŽ¶
Tato stránka je součástí projektu Linux man-pages. Popis projektu a informace o hlášení chyb najdete na http://www.kernel.org/doc/man-pages/.
25. září 2009 | Linux 0.99.11 |